package de.hdu.pms.dao;

import java.util.List;

import org.apache.log4j.Logger;
import org.junit.Test;

import de.hdu.pms.model.Projekte;

public class ProjekteDaoTest extends AbstractDataAccessTest {

	public static Logger Log = Logger.getLogger(ProjekteDaoTest.class);

	public static void setLog(Logger log) {
		Log = log;
	}

	private ProjekteDao projekteDao = null;
	private String tableName = "projekte";

	public void setProjekteDao(ProjekteDao projekteDao) {
		this.projekteDao = projekteDao;
	}

	@Test
	public void testFindById() {
		Log.info("UnitTest - Projekte - FindById");
		Projekte projekte = new Projekte();
		projekte.setProjekt_bez("findById");
		projekte.setProjekt_aktiv(true);
		projekteDao.save(projekte);
		List<Projekte> alleProjekte = projekteDao.findAll();
		for (Projekte p : alleProjekte) {
			int id = p.getId();
			Projekte found = projekteDao.findById(id);
			assertEquals(p.getProjekt_bez(), found.getProjekt_bez());
		}
	}

	@Test
	public void testFindAll() {
		Log.info("UnitTest - Projekte - FindAll");
		// Wird bereits in testFindById() getestet
		testFindById();
	}

	@SuppressWarnings("deprecation")
	@Test
	public void testSave() {
		Log.info("UnitTest - Projekte - Save");
		String[] tables = { tableName };
		deleteFromTables(tables);
		Projekte projekte = new Projekte();
		projekte.setProjekt_bez("save");
		projekte.setProjekt_aktiv(true);
		projekteDao.save(projekte);
		int rows = countRowsInTable(tableName);
		assertEquals("Es darf nur eine Zeile vorhanden sein", 1, rows);
	}

	@SuppressWarnings("deprecation")
	@Test
	public void testDelete() {
		Log.info("UnitTest - Projekte - Delete");
		String[] tables = { tableName };
		deleteFromTables(tables);
		Projekte projekte = new Projekte();
		projekte.setProjekt_bez("delete");
		projekte.setProjekt_aktiv(true);
		projekteDao.save(projekte);
		try {
			projekteDao.delete(projekte);
		} catch (Exception e) {
			Log.info("Exception: " + e.getMessage());
		}
		List<Projekte> alle = projekteDao.findAll();
		assertEquals(0, alle.size());
		deleteFromTables(tables);

	}

	@SuppressWarnings("deprecation")
	@Test
	public void testFindActive() {
		String[] tables = { tableName };
		deleteFromTables(tables);
		Projekte projekte = new Projekte();
		projekte.setProjekt_bez("active");
		projekte.setProjekt_aktiv(true);
		projekteDao.save(projekte);
		assertEquals(projekteDao.findAll(), projekteDao.findActive());
		deleteFromTables(tables);

	}

}
